include protocol PTestShutdownSub;

namespace mozilla {
namespace _ipdltest {

intr protocol PTestShutdown {
    manages PTestShutdownSub;

child:
    async Start();

parent:
    // NB: we test deletion and crashing only, not shutdown, because
    // crashing is the same code path as shutdown, and other IPDL unit
    // tests check shutdown semantics
    async PTestShutdownSub(bool expectCrash);

    // Used to synchronize between parent and child, to avoid races
    // around flushing socket write queues
    sync Sync();

    async __delete__();


state START:
    send Start goto TESTING;

state TESTING:
    recv PTestShutdownSub goto TESTING;
    recv Sync goto DYING;

state DYING:
    recv __delete__;
};

} // namespace _ipdltest
} // namespace mozilla
